#include "musiclist.h"
#include <QDebug>
#include <QMimeDatabase> //识别文件类型类的头文件
#include <QSqlQuery>
#include <QSqlError>


MusicList::MusicList()
{

}

void MusicList::addMusicsByUrl(const QList<QUrl> &musicUrls)
{
    //需要将所有的音乐添加到 musicList 中
    for(auto e : musicUrls)
    {
        //musicUrl得是一个有效的 歌曲文件，才能添加到musicList中

        // 检测歌曲的MIME类型 来判断
        QMimeDatabase mimeDB;
                                             //        tostring()  file:///D:/Music/song.mp3（带协议头）。
                                             //        toLocalFile()  D:/Music/song.mp3（本地路径，无协议头）
                                             //        toLocalFile() 更合适 能直接获取本地文件的实际路径
        QMimeType mimeType = mimeDB.mimeTypeForFile(e.toLocalFile());
        QString mime = mimeType.name();  //中的name()方法直接转成QString

        //mime 和 "audio/mpeg"是mp3格式文件 "audio/flac"是无损音乐格式文件 "audio/wav"    MIME类型 主类型/子类型
        if(mime == "audio/mpeg" || mime == "audio/flac" || mime == "audio/wav" )
        {
            // 创建一个Music对象 需要将url给创建的Music对象  再添加到musicList中
            //qDebug()<<e<<": "<<mime;
            Music music(e);
            musicList.push_back(music);
        }
    }
}

QVector<Music>::iterator MusicList::findMusicByMusicId(const QString &musicId)
{
    for(auto it = begin();it!=end() ; ++it)
    {
        if(it->getMusicId() == musicId)
        {
            return it;
        }
    }
    return end();
}

QVector<Music>::iterator MusicList::begin()
{
    return musicList.begin();
}
QVector<Music>::iterator MusicList::end()
{
    return musicList.end();
}

//*********************************************数据库插入操作***************

void MusicList::writeToQQMusicDB()
{
    for(auto music : musicList)
    {
        // 拿到每个musci对象之后，将music的所有属性写入到数据库
        // 具体写入单个Music对象的操作也将其封装成一个函数
        music.InsertMusicToDB();
    }
}

void MusicList::readFromQQMusicDB()
{
    QSqlQuery query;
    query.prepare("select musicId, musicName, musicSinger, albumnName, musicUrl,\
                   duration, isLike, isHistory from MusicInfo");
    if(!query.exec())
    {
        qDebug()<<"数据库查询失败!!!"<<query.lastError().text();
        return;
    }

    while(query.next())
    {
        Music music;
        music.setMusicId(query.value(0).toString());
        music.setMusicName(query.value(1).toString());
        music.setMusicSinger(query.value(2).toString());
        music.setMusicAlbumn(query.value(3).toString());
        music.setMusicUrl(query.value(4).toString());
        music.setMusicdruation(query.value(5).toLongLong());
        music.setIsLike(query.value(6).toBool());
        music.setIsHistory(query.value(7).toBool());
        musicList.push_back(music);
    }
}





